
package persistencia;

/**
 *@author José Manuel Domínguez Carvajal
 * @fecha 03/10/2011
 * @version 1.0
 */

import bitclub.*;
import java.sql.*;
import java.text.*;
import java.util.*;
import java.util.Date;

public class PMovimiento {
    
    /**
     * Introduce un nuevo objeto Movimiento en la base de datos 
     */    
    public static void nuevoBD(Movimiento movimiento) {
        Connection connection = null;
        Statement statement = null;     
        DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");

        try {
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(PDatos.baseDatos, PDatos.usuario, PDatos.password);
            statement = connection.createStatement();

            //Pasamos la cadena del INSERT a la base de datos

            statement.executeUpdate("INSERT INTO MOVIMIENTOS (CONCEPTO, FECHA, IMPORTE) "
                    + "VALUES ( '" + movimiento.getConcepto() + "', '"
                    + dateFormat.format(movimiento.getFecha()) + "', " + movimiento.getImporte() + ")");
            
        } catch (Exception ex) {
            System.out.println(ex.toString());
        } finally {
            try {
                statement.close();
                connection.close();
            } catch (Exception ex) {
                System.out.println(ex.toString());
            }
        }

    }
    
    /**
     * Devuelve una lista de Movimientos que se han producido en una determinada fecha 
     */    
    public static List<Movimiento> seleccionarporFecha(Date fechaInicio, Date fechaFin) {
        List<Movimiento> listMovimiento = new ArrayList();                              
        DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
        String sql = "SELECT CONCEPTO, IMPORTE, FECHA FROM MOVIMIENTOS WHERE FECHA BETWEEN '" + dateFormat.format(fechaInicio) + "' AND '" + dateFormat.format(fechaFin) + "'";
        listMovimiento = seleccionarBD(sql);
        return listMovimiento;
    }
    
    /**
     * Devuelve una lista de los ultimos Movimientos que se han producido. 
     */ 
    public static List<Movimiento> seleccionarUltimos(int cantidad) {
        List<Movimiento> listMovimiento = new ArrayList();
        String sql = "SELECT CONCEPTO, IMPORTE, FECHA FROM MOVIMIENTOS ORDER BY FECHA LIMIT "+ cantidad;
        listMovimiento = seleccionarBD(sql);
        return listMovimiento;
    }      
    
    public static List<Movimiento> seleccionarBD(String sql) {
    
        //Lista de movimiento que devolveremos
        List<Movimiento> listMovimiento = new ArrayList();

        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;

        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

        try {
            Movimiento movimiento = null;

            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(PDatos.baseDatos, PDatos.usuario, PDatos.password);
            statement = connection.createStatement();
            resultSet = statement.executeQuery(sql);

            while (resultSet.next()) {

                movimiento = new Movimiento();

                movimiento.setConcepto(resultSet.getNString("concepto"));
                movimiento.setFecha(dateFormat.parse(resultSet.getString("fecha")));
                movimiento.setImporte(resultSet.getDouble("importe"));

                //Movimiento construido y la añadimos a la lista
                listMovimiento.add(movimiento);
            }

        } catch (Exception ex) {
            System.out.println(ex.toString());
        } finally {
            try {
                resultSet.close();
                statement.close();
                connection.close();
            } catch (Exception ex) {
                System.out.println(ex.toString());
            }
        }
        return listMovimiento;
    }
   
}